home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sources.misc
- From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
- subject: v08i017: hint, an unobtrusive messager, part 2 of 2
- Reply-To: edf@ROCKY2.ROCKEFELLER.EDU (David MacKenzie)
-
- Posting-number: Volume 8, Issue 17
- Submitted-by: edf@ROCKY2.ROCKEFELLER.EDU (David MacKenzie)
- Archive-name: hint/part02
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 2 (of 2)."
- # Contents: tty.c clearhint.c Makefile COPYING
- # Wrapped by dave@zedfdc on Thu Aug 24 20:10:06 1989
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'tty.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'tty.c'\"
- else
- echo shar: Extracting \"'tty.c'\" \(6097 characters\)
- sed "s/^X//" >'tty.c' <<'END_OF_FILE'
- X/* tty.c -- functions dealing with terminals and termcap
- X Copyright (C) 1989 David MacKenzie
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with this program; if not, write to the Free Software
- X Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
- X
- X#include "hint.h"
- X
- X/* Termcap codes. */
- Xstatic char *tc_ts; /* To status line. */
- Xstatic char *tc_fs; /* From status line. */
- Xstatic char *tc_ds; /* Disable (clear) status line. */
- Xstatic char *tc_bl; /* Bell (possibly visual). */
- Xstatic short tc_ws; /* Width (in columns) of status line. */
- X
- X/* Send the message to `tt->tt_tty'. Use hinttab to determine what the
- X status line codes for that terminal are. */
- X
- Xvoid
- Xsendhint (tt)
- X struct ttylist *tt;
- X{
- X int fd;
- X
- X if (!hintable (tt->tt_tty))
- X {
- X fprintf (stderr, "%s: %s on %s is no longer accepting hints\n",
- X program_name, tt->tt_user, tt->tt_tty);
- X return;
- X }
- X init_buffer ();
- X /* We put the beep here because bells sometimes don't work when in the
- X status line. */
- X tputs (tt->tt_ht.h_bl, 1, buffer_char);
- X tputs (tgoto (tt->tt_ht.h_ts, 0, 0), 1, buffer_char);
- X if (!name_at_end)
- X {
- X buffer_string ("(");
- X buffer_string (whoami ());
- X buffer_string (") ");
- X }
- X buffer_string (message);
- X if (name_at_end)
- X {
- X buffer_string (" - ");;
- X buffer_string (whoami ());
- X }
- X tputs (tt->tt_ht.h_fs, 1, buffer_char);
- X
- X fd = open (tt->tt_tty, O_WRONLY);
- X if (fd == -1)
- X pfatal (tt->tt_tty);
- X flush_buffer (fd);
- X close (fd);
- X}
- X
- X/* Erase the hint from `tt->tt_tty'. */
- X
- Xvoid
- Xerasehint (tt)
- X struct ttylist *tt;
- X{
- X int fd;
- X
- X init_buffer ();
- X tputs (tt->tt_ht.h_ds, 1, buffer_char);
- X
- X fd = open (tt->tt_tty, O_WRONLY);
- X if (fd == -1)
- X pfatal (tt->tt_tty);
- X flush_buffer (fd);
- X close (fd);
- X}
- X
- X/* Return our username. First try utmp entry; if that fails, use uid.
- X Guaranteed to return a string 8 characters or shorter. */
- X
- Xchar *
- Xwhoami ()
- X{
- X char *me;
- X
- X me = getlogin ();
- X if (me == NULL)
- X me = pwname ();
- X if (strlen (me) > 8)
- X me[8] = 0;
- X return me;
- X}
- X
- X/* Return the passwd name based on our uid. */
- X
- Xchar *
- Xpwname ()
- X{
- X struct passwd *pw;
- X
- X pw = getpwuid (getuid ());
- X if (pw == NULL)
- X return "";
- X else
- X return pw->pw_name;
- X}
- X
- X/* Set the entry in hinttab for tty `tty' (a full path).
- X
- X First we search for an existing (invalid) entry for `tty', and if
- X we find one, we update it.
- X
- X If we don't find one, we open the file in
- X APPEND mode, and add a new entry to the end. Since we're using
- X atomic writes, we don't need to use any special file locking to
- X prevent competing hint processes from writing scrambled entries to
- X the end of the file. */
- X
- Xvoid
- Xupdatetab (tty)
- X char *tty;
- X{
- X static struct hinttab h;
- X
- X /* Search the hinttab for an old entry for `tty'. */
- X sethtent ();
- X if (!gethttty (tty))
- X {
- X /* No previous entry for `tty'. Add one. */
- X endhtent ();
- X sethtapp ();
- X }
- X setup_termcap ();
- X get_speed ();
- X strcpy (h.h_tty, tty);
- X strcpy (h.h_ts, tc_ts);
- X strcpy (h.h_fs, tc_fs);
- X strcpy (h.h_ds, tc_ds);
- X strcpy (h.h_bl, tc_bl);
- X h.h_ws = tc_ws;
- X writehtent (&h);
- X endhtent ();
- X}
- X
- X/* These functions do their best to provide atomic writes, since
- X we don't want our output getting mixed up with that of foreground
- X processes. They don't check for overflows. */
- X
- Xstatic char output_buffer[300];
- Xstatic int buffer_length;
- X
- Xvoid
- Xinit_buffer ()
- X{
- X buffer_length = 0;
- X}
- X
- Xint
- Xbuffer_char (c)
- X int c;
- X{
- X output_buffer[buffer_length++] = c;
- X}
- X
- X/* `s' is a null-terminated string. */
- X
- Xvoid
- Xbuffer_string (s)
- X char *s;
- X{
- X while (*s)
- X output_buffer[buffer_length++] = *s++;
- X}
- X
- Xvoid
- Xflush_buffer (fd)
- X int fd;
- X{
- X write (fd, output_buffer, buffer_length);
- X}
- X
- X/* Output speed for tputs. */
- Xextern short ospeed;
- X
- X/* Padding character for tputs. */
- Xextern char PC;
- X
- X/* For tgoto. */
- Xextern char *BC, *UP;
- X
- X/* Raw termcap entry. */
- Xstatic char entry[1024];
- X
- X/* Extracted termcap strings. */
- Xstatic char strings[1024];
- X
- X/* Initialize global termcap strings. */
- X
- Xvoid
- Xsetup_termcap ()
- X{
- X char *tc_pc; /* Padding character string. */
- X
- X if (term == NULL)
- X {
- X fprintf (stderr, "%s: TERM environment variable is not defined\n",
- X program_name);
- X exit (1);
- X }
- X switch (tgetent (entry, term))
- X {
- X case 0:
- X fprintf (stderr,
- X "%s: Terminal type %s is unknown\n", program_name, term);
- X exit (1);
- X case -1:
- X fprintf (stderr,
- X "%s: Cannot open terminal description database\n", program_name);
- X exit (1);
- X }
- X
- X /* Re-use term to point to space for next extracted string. */
- X term = strings;
- X tc_pc = tgetstr ("pc", &term);
- X PC = tc_pc ? *tc_pc : 0;
- X BC = UP = NULL;
- X if (tgetflag ("hs"))
- X {
- X /* tgetstr returns NULL if the capability was not found. */
- X tc_ts = tgetstr ("ts", &term);
- X tc_fs = tgetstr ("fs", &term);
- X tc_ds = tgetstr ("ds", &term);
- X tc_ws = tgetnum ("ws");
- X if (tc_ws == -1)
- X tc_ws = DEF_WS;
- X }
- X else
- X {
- X tc_ts = tc_fs = tc_ds = "";
- X tc_ws = DEF_WS;
- X }
- X if (use_vbell)
- X tc_bl = tgetstr ("vb", &term);
- X else
- X tc_bl = NULL;
- X if (use_bell && !tc_bl)
- X {
- X tc_bl = tgetstr ("bl", &term);
- X if (!tc_bl)
- X tc_bl = "\7";
- X }
- X else
- X tc_bl = "";
- X}
- X
- Xvoid
- Xget_speed ()
- X{
- X#ifdef USG
- X struct termio tty_buffer;
- X
- X if (ioctl (1, TCGETA, &tty_buffer) != -1)
- X ospeed = tty_buffer.c_cflag & CBAUD;
- X#else
- X struct sgttyb tty_buffer;
- X
- X if (gtty (1, &tty_buffer) != -1)
- X ospeed = tty_buffer.sg_ospeed;
- X#endif
- X else
- X ospeed = 0;
- X}
- END_OF_FILE
- if test 6097 -ne `wc -c <'tty.c'`; then
- echo shar: \"'tty.c'\" unpacked with wrong size!
- fi
- # end of 'tty.c'
- fi
- if test -f 'clearhint.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'clearhint.c'\"
- else
- echo shar: Extracting \"'clearhint.c'\" \(2958 characters\)
- sed "s/^X//" >'clearhint.c' <<'END_OF_FILE'
- X/* clearhint.c -- clear terminal status line
- X Copyright (C) 1989 David MacKenzie
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with this program; if not, write to the Free Software
- X Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
- X
- X/* clearhint - clear terminal status line
- X
- X Usage: clearhint [-T terminal]
- X
- X David MacKenzie
- X Latest revision: 08/15/89 */
- X
- X#include <stdio.h>
- X#ifdef USG
- X#include <termio.h>
- X#else
- X#include <sgtty.h>
- X#endif
- X
- Xchar *getenv ();
- Xchar *tgetstr ();
- Xvoid exit ();
- X
- Xint tcputchar ();
- Xvoid getspeed ();
- Xvoid usage ();
- X
- Xextern short ospeed; /* Output speed of stdout for tputs. */
- Xextern char PC; /* Pad character for tputs. */
- X
- Xint
- Xmain (argc, argv)
- X int argc;
- X char **argv;
- X{
- X extern char *optarg;
- X extern int optind;
- X char entry[1024]; /* Raw termcap entry. */
- X char strings[80]; /* Extracted termcap strings. */
- X char *term; /* Environment variable TERM. */
- X char *next_string; /* Pointer into strings. */
- X char *tc_ds; /* Disable status line string. */
- X char *tc_pc; /* Pad character string. */
- X int c; /* Option character. */
- X
- X term = getenv ("TERM");
- X while ((c = getopt (argc, argv, "T:")) != EOF)
- X if (c == 'T')
- X term = optarg;
- X else
- X usage (argv[0]);
- X if (optind != argc)
- X usage (argv[0]);
- X
- X if (term == NULL)
- X {
- X fprintf (stderr,
- X "%s: TERM environment variable is not defined\n", argv[0]);
- X exit (1);
- X }
- X
- X switch (tgetent (entry, term))
- X {
- X case 0:
- X fprintf (stderr,
- X "%s: Terminal type %s is unknown\n", argv[0], term);
- X exit (1);
- X case -1:
- X fprintf (stderr,
- X "%s: Cannot open terminal description database\n", argv[0]);
- X exit (1);
- X }
- X
- X getspeed ();
- X
- X next_string = strings;
- X tc_pc = tgetstr ("pc", &next_string);
- X PC = tc_pc ? *tc_pc : 0;
- X tc_ds = tgetstr ("ds", &next_string);
- X if (tc_ds)
- X {
- X tputs (tc_ds, 1, tcputchar);
- X exit (0);
- X }
- X exit (1);
- X /* NOTREACHED */
- X}
- X
- Xvoid
- Xgetspeed ()
- X{
- X#ifdef USG
- X struct termio tty_buffer;
- X
- X if (ioctl (1, TCGETA, &tty_buffer) != -1)
- X ospeed = tty_buffer.c_cflag & CBAUD;
- X#else
- X struct sgttyb tty_buffer;
- X
- X if (gtty (1, &tty_buffer) != -1)
- X ospeed = tty_buffer.sg_ospeed;
- X#endif
- X else
- X ospeed = 0;
- X}
- X
- Xint
- Xtcputchar (c)
- X int c;
- X{
- X putchar (c & 0x7f);
- X return c;
- X}
- X
- Xvoid
- Xusage (program)
- X char *program;
- X{
- X fprintf (stderr, "Usage: %s [-T terminal]\n", program);
- X exit (1);
- X}
- END_OF_FILE
- if test 2958 -ne `wc -c <'clearhint.c'`; then
- echo shar: \"'clearhint.c'\" unpacked with wrong size!
- fi
- # end of 'clearhint.c'
- fi
- if test -f 'Makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Makefile'\"
- else
- echo shar: Extracting \"'Makefile'\" \(1704 characters\)
- sed "s/^X//" >'Makefile' <<'END_OF_FILE'
- X# Makefile for hint
- X# David MacKenzie
- X# Latest revision: 08/24/89
- X
- X# Targets:
- X# all (default)
- X# Make the executables of hint and clearhint in the current directory.
- X# install
- X# Copy the executables into $(BINDIR) and chmod them (must be root).
- X# initialize
- X# Create and clear $(DATAFILE).
- X# clean
- X# Remove executable, object and temporary files from current directory.
- X# lint
- X# Run lint on hint sources with output in LINT.OUT.
- X# tags
- X# Run ctags on hint sources.
- X# kit
- X# Make shell archive.
- X
- XSHELL = /bin/sh
- X
- X# Path of the file containing hint y users' termcap strings.
- XDATAFILE = /usr/local/lib/hinttab
- X
- X# Directory for the binaries to go in.
- XBINDIR = /usr/new
- X
- X# DEFS should include -DUSG on System V.
- XDEFS = -DHINTTAB=\"$(DATAFILE)\" -DUSG
- XCFLAGS = -O $(DEFS)
- XLDFLAGS = -s
- X# LIBS should include -ltermcap on BSD, -lcurses on System V.
- XLIBS = -lcurses
- X
- XHDRS = hint.h
- X# Include str.c and str.o on BSD; comment them out on System V.
- XSRCS = main.c hinttab.c stov.c tty.c user.c # str.c
- XOBJS = main.o hinttab.o stov.o tty.o user.o # str.o
- X
- Xall: hint clearhint
- X
- Xhint: $(OBJS)
- X $(CC) -o hint $(LDFLAGS) $(OBJS) $(LIBS)
- X chmod 4755 hint
- X
- X$(OBJS): $(HDRS)
- X
- X
- Xclearhint: clearhint.c
- X $(CC) -o clearhint $(CFLAGS) $(LDFLAGS) clearhint.c $(LIBS)
- X
- Xinstall: hint clearhint hall.sh
- X cp hint $(BINDIR)/hint
- X chmod 4755 $(BINDIR)/hint
- X cp clearhint $(BINDIR)/clearhint
- X chmod 755 $(BINDIR)/clearhint
- X cp hall.sh $(BINDIR)/hall
- X chmod 755 $(BINDIR)/hall
- X
- Xinitialize:
- X cat /dev/null > $(DATAFILE)
- X chmod 644 $(DATAFILE)
- X
- Xclean:
- X rm -f $(OBJS) hint clearhint LINT.OUT tags a.out mon.out core RUNLOG
- X
- Xlint:
- X lint $(DEFS) $(SRCS) $(LIBS) > LINT.OUT
- X
- Xtags: $(SRCS)
- X ctags $(SRCS)
- X
- Xkit:
- X makekit -m -p -nHint -s40k
- END_OF_FILE
- if test 1704 -ne `wc -c <'Makefile'`; then
- echo shar: \"'Makefile'\" unpacked with wrong size!
- fi
- # end of 'Makefile'
- fi
- if test -f 'COPYING' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'COPYING'\"
- else
- echo shar: Extracting \"'COPYING'\" \(12488 characters\)
- sed "s/^X//" >'COPYING' <<'END_OF_FILE'
- X
- X GNU GENERAL PUBLIC LICENSE
- X Version 1, February 1989
- X
- X Copyright (C) 1989 Free Software Foundation, Inc.
- X 675 Mass Ave, Cambridge, MA 02139, USA
- X Everyone is permitted to copy and distribute verbatim copies
- X of this license document, but changing it is not allowed.
- X
- X Preamble
- X
- X The license agreements of most software companies try to keep users
- Xat the mercy of those companies. By contrast, our General Public
- XLicense is intended to guarantee your freedom to share and change free
- Xsoftware--to make sure the software is free for all its users. The
- XGeneral Public License applies to the Free Software Foundation's
- Xsoftware and to any other program whose authors commit to using it.
- XYou can use it for your programs, too.
- X
- X When we speak of free software, we are referring to freedom, not
- Xprice. Specifically, the General Public License is designed to make
- Xsure that you have the freedom to give away or sell copies of free
- Xsoftware, that you receive source code or can get it if you want it,
- Xthat you can change the software or use pieces of it in new free
- Xprograms; and that you know you can do these things.
- X
- X To protect your rights, we need to make restrictions that forbid
- Xanyone to deny you these rights or to ask you to surrender the rights.
- XThese restrictions translate to certain responsibilities for you if you
- Xdistribute copies of the software, or if you modify it.
- X
- X For example, if you distribute copies of a such a program, whether
- Xgratis or for a fee, you must give the recipients all the rights that
- Xyou have. You must make sure that they, too, receive or can get the
- Xsource code. And you must tell them their rights.
- X
- X We protect your rights with two steps: (1) copyright the software, and
- X(2) offer you this license which gives you legal permission to copy,
- Xdistribute and/or modify the software.
- X
- X Also, for each author's protection and ours, we want to make certain
- Xthat everyone understands that there is no warranty for this free
- Xsoftware. If the software is modified by someone else and passed on, we
- Xwant its recipients to know that what they have is not the original, so
- Xthat any problems introduced by others will not reflect on the original
- Xauthors' reputations.
- X
- X The precise terms and conditions for copying, distribution and
- Xmodification follow.
- X
- X GNU GENERAL PUBLIC LICENSE
- X TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- X
- X 0. This License Agreement applies to any program or other work which
- Xcontains a notice placed by the copyright holder saying it may be
- Xdistributed under the terms of this General Public License. The
- X"Program", below, refers to any such program or work, and a "work based
- Xon the Program" means either the Program or any work containing the
- XProgram or a portion of it, either verbatim or with modifications. Each
- Xlicensee is addressed as "you".
- X
- X 1. You may copy and distribute verbatim copies of the Program's source
- Xcode as you receive it, in any medium, provided that you conspicuously and
- Xappropriately publish on each copy an appropriate copyright notice and
- Xdisclaimer of warranty; keep intact all the notices that refer to this
- XGeneral Public License and to the absence of any warranty; and give any
- Xother recipients of the Program a copy of this General Public License
- Xalong with the Program. You may charge a fee for the physical act of
- Xtransferring a copy.
- X
- X 2. You may modify your copy or copies of the Program or any portion of
- Xit, and copy and distribute such modifications under the terms of Paragraph
- X1 above, provided that you also do the following:
- X
- X a) cause the modified files to carry prominent notices stating that
- X you changed the files and the date of any change; and
- X
- X b) cause the whole of any work that you distribute or publish, that
- X in whole or in part contains the Program or any part thereof, either
- X with or without modifications, to be licensed at no charge to all
- X third parties under the terms of this General Public License (except
- X that you may choose to grant warranty protection to some or all
- X third parties, at your option).
- X
- X c) If the modified program normally reads commands interactively when
- X run, you must cause it, when started running for such interactive use
- X in the simplest and most usual way, to print or display an
- X announcement including an appropriate copyright notice and a notice
- X that there is no warranty (or else, saying that you provide a
- X warranty) and that users may redistribute the program under these
- X conditions, and telling the user how to view a copy of this General
- X Public License.
- X
- X d) You may charge a fee for the physical act of transferring a
- X copy, and you may at your option offer warranty protection in
- X exchange for a fee.
- X
- XMere aggregation of another independent work with the Program (or its
- Xderivative) on a volume of a storage or distribution medium does not bring
- Xthe other work under the scope of these terms.
- X
- X 3. You may copy and distribute the Program (or a portion or derivative of
- Xit, under Paragraph 2) in object code or executable form under the terms of
- XParagraphs 1 and 2 above provided that you also do one of the following:
- X
- X a) accompany it with the complete corresponding machine-readable
- X source code, which must be distributed under the terms of
- X Paragraphs 1 and 2 above; or,
- X
- X b) accompany it with a written offer, valid for at least three
- X years, to give any third party free (except for a nominal charge
- X for the cost of distribution) a complete machine-readable copy of the
- X corresponding source code, to be distributed under the terms of
- X Paragraphs 1 and 2 above; or,
- X
- X c) accompany it with the information you received as to where the
- X corresponding source code may be obtained. (This alternative is
- X allowed only for noncommercial distribution and only if you
- X received the program in object code or executable form alone.)
- X
- XSource code for a work means the preferred form of the work for making
- Xmodifications to it. For an executable file, complete source code means
- Xall the source code for all modules it contains; but, as a special
- Xexception, it need not include source code for modules which are standard
- Xlibraries that accompany the operating system on which the executable
- Xfile runs, or for standard header files or definitions files that
- Xaccompany that operating system.
- X
- X 4. You may not copy, modify, sublicense, distribute or transfer the
- XProgram except as expressly provided under this General Public License.
- XAny attempt otherwise to copy, modify, sublicense, distribute or transfer
- Xthe Program is void, and will automatically terminate your rights to use
- Xthe Program under this License. However, parties who have received
- Xcopies, or rights to use copies, from you under this General Public
- XLicense will not have their licenses terminated so long as such parties
- Xremain in full compliance.
- X
- X 5. By copying, distributing or modifying the Program (or any work based
- Xon the Program) you indicate your acceptance of this license to do so,
- Xand all its terms and conditions.
- X
- X 6. Each time you redistribute the Program (or any work based on the
- XProgram), the recipient automatically receives a license from the original
- Xlicensor to copy, distribute or modify the Program subject to these
- Xterms and conditions. You may not impose any further restrictions on the
- Xrecipients' exercise of the rights granted herein.
- X
- X 7. The Free Software Foundation may publish revised and/or new versions
- Xof the General Public License from time to time. Such new versions will
- Xbe similar in spirit to the present version, but may differ in detail to
- Xaddress new problems or concerns.
- X
- XEach version is given a distinguishing version number. If the Program
- Xspecifies a version number of the license which applies to it and "any
- Xlater version", you have the option of following the terms and conditions
- Xeither of that version or of any later version published by the Free
- XSoftware Foundation. If the Program does not specify a version number of
- Xthe license, you may choose any version ever published by the Free Software
- XFoundation.
- X
- X 8. If you wish to incorporate parts of the Program into other free
- Xprograms whose distribution conditions are different, write to the author
- Xto ask for permission. For software which is copyrighted by the Free
- XSoftware Foundation, write to the Free Software Foundation; we sometimes
- Xmake exceptions for this. Our decision will be guided by the two goals
- Xof preserving the free status of all derivatives of our free software and
- Xof promoting the sharing and reuse of software generally.
- X
- X NO WARRANTY
- X
- X 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
- XFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
- XOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
- XPROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
- XOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- XMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
- XTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
- XPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
- XREPAIR OR CORRECTION.
- X
- X 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
- XWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
- XREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
- XINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
- XOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
- XTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
- XYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
- XPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
- XPOSSIBILITY OF SUCH DAMAGES.
- X
- X END OF TERMS AND CONDITIONS
- X
- X Appendix: How to Apply These Terms to Your New Programs
- X
- X If you develop a new program, and you want it to be of the greatest
- Xpossible use to humanity, the best way to achieve this is to make it
- Xfree software which everyone can redistribute and change under these
- Xterms.
- X
- X To do so, attach the following notices to the program. It is safest to
- Xattach them to the start of each source file to most effectively convey
- Xthe exclusion of warranty; and each file should have at least the
- X"copyright" line and a pointer to where the full notice is found.
- X
- X <one line to give the program's name and a brief idea of what it does.>
- X Copyright (C) 19yy <name of author>
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with this program; if not, write to the Free Software
- X Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- XAlso add information on how to contact you by electronic and paper mail.
- X
- XIf the program is interactive, make it output a short notice like this
- Xwhen it starts in an interactive mode:
- X
- X Gnomovision version 69, Copyright (C) 19xx name of author
- X Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- X This is free software, and you are welcome to redistribute it
- X under certain conditions; type `show c' for details.
- X
- XThe hypothetical commands `show w' and `show c' should show the
- Xappropriate parts of the General Public License. Of course, the
- Xcommands you use may be called something other than `show w' and `show
- Xc'; they could even be mouse-clicks or menu items--whatever suits your
- Xprogram.
- X
- XYou should also get your employer (if you work as a programmer) or your
- Xschool, if any, to sign a "copyright disclaimer" for the program, if
- Xnecessary. Here a sample; alter the names:
- X
- X Yoyodyne, Inc., hereby disclaims all copyright interest in the
- X program `Gnomovision' (a program to direct compilers to make passes
- X at assemblers) written by James Hacker.
- X
- X <signature of Ty Coon>, 1 April 1989
- X Ty Coon, President of Vice
- X
- XThat's all there is to it!
- END_OF_FILE
- if test 12488 -ne `wc -c <'COPYING'`; then
- echo shar: \"'COPYING'\" unpacked with wrong size!
- fi
- # end of 'COPYING'
- fi
- echo shar: End of archive 2 \(of 2\).
- cp /dev/null ark2isdone
- MISSING=""
- for I in 1 2 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked both archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-
-